<?php

class ASolicitudMantenimiento {

    public function __construct(){
	}
	public function generarOrdenes(EFacade & $facade)
	{
		$docSM = & $facade->getDocumentRoot();
		$workflow = & $facade->getWorkflow();
		//$OMCh = & $docSLU->ordenMCheckListPrincipal;
		$usuario=NULL;
		//echo '<hr> >> Slu ',$docSLU;
		$ezpdo_= getManager();
		$mantRutinario=$docSM->mantenimientoRutinario;
		$mantPreventivo=$docSM->mantenimientoPreventivo;
		$mantCorrectivo=$docSM->mantenimientoCorrectivo;
		$listaPendientesR=array();
		$listaPendientesP=array();
		$listaPendientesC=array();
		
		foreach($mantRutinario as $mr){
			if($mr->pendiente==FALSE){
				
				$ordenMantenimiento = $facade->session->create('DOrdenMantenimiento');		
				$docSM->ordenGenerada[]=$ordenMantenimiento;
				$ordenMantenimiento->areaTrabajo=$mr->mantenimientoRutinario->areaTrabajo;
				$ordenMantenimiento->tipoMantenimiento=$mr->mantenimientoRutinario;
				$role=NULL;
				$newEfacade =& EFacade :: initWorkflow($facade->session, $ordenMantenimiento, & $role);
				$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
				$trans = $transSet->getTransByName('t1');
				$usuario=NULL;
				//echo "<br>placeSet",$placeSet = & EFacade :: getCurrentPlaceSet($newEfacade->getWorkflow());
				$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
				//echo "<br><br>la wt es: ";
				$ordenMantenimiento->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
				$newEfacade->saveWorkflow();
				$ordenMantenimiento->commit();//echo "<br><br> es:1 ";
				$ordenMantenimiento->numero = $ordenMantenimiento->getDocumentNumber();
				$ordenMantenimiento->commit();
				
				//echo "<br><br>es: ",$ordenDespahoL;
			unset($newEfacade);
			}
			else if($mr->pendiente==TRUE){
				$listaPendientesR[]=$mr;
			}
		}
		
		foreach($mantPreventivo as $mp){
			if($mp->pendiente==FALSE){
				
				$ordenMantenimiento = $facade->session->create('DOrdenMantenimiento');		
				$docSM->ordenGenerada[]=$ordenMantenimiento;
				$ordenMantenimiento->areaTrabajo=$mp->mantenimientoPreventivo->areaTrabajo;
				$ordenMantenimiento->tipoMantenimiento=$mp->mantenimientoPreventivo;
				$role=NULL;
				$newEfacade =& EFacade :: initWorkflow($facade->session, $ordenMantenimiento, & $role);
				$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
				$trans = $transSet->getTransByName('t1');
				$usuario=NULL;
				$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
				//echo "<br><br>la wt es: ";
				$ordenMantenimiento->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
				$newEfacade->saveWorkflow();
				$ordenMantenimiento->commit();//echo "<br><br> es:1 ";
				$ordenMantenimiento->numero = $ordenMantenimiento->getDocumentNumber();
				$ordenMantenimiento->commit();
				
				//echo "<br><br>es: ",$ordenDespahoL;
			unset($newEfacade);
			}
			else if($mp->pendiente==TRUE){
				$listaPendientesP[]=$mp;
			}
		}
		
		foreach($mantCorrectivo as $mc){
			if($mc->pendiente==FALSE){
				$ordenInspeccion = $facade->session->create('DOrdenInspeccion');		
				$docSM->ordenInspeccionGenerada[]=$ordenInspeccion;
				$ordenInspeccion->areaTrabajo=$docSM->areaInspeccion;
				$ordenInspeccion->tipoFalla=$mc->mantenimientoCorrectivo;
				//echo "<br>la lista",$mc;
				//echo "<br>la descripcion",$mc->descripcion;
				$ordenInspeccion->descripcionAveria=$mc->descripcion;
				$role=NULL;
				$newEfacade =& EFacade :: initWorkflow($facade->session, $ordenInspeccion, & $role);
				$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
				$trans = $transSet->getTransByName('t1');
				$usuario=NULL;
				$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
				//echo "<br><br>la wt es: ";
				$ordenInspeccion->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
				$newEfacade->saveWorkflow();
				$ordenInspeccion->commit();//echo "<br><br> es:1 ";
				$ordenInspeccion->numero = $ordenInspeccion->getDocumentNumber();
				$ordenInspeccion->commit();
				//echo "la orden de inspeccion",$ordenInspeccion;
				//echo "<br><br>es: ",$ordenDespahoL;
			unset($newEfacade);
			}
			else if($mc->pendiente==TRUE){
				$listaPendientesC[]=$mc;
			}
		}
		
				if(count($listaPendientesP)>0 || count($listaPendientesR)>0 || count($listaPendientesC)>0){
				$solicitud = $facade->session->create('DSolicitudMantenimiento');	
				
				$areaTrabajo=$ezpdo_->find('FROM MAreaTrabajo as t WHERE t.nombre=?','Mantenimiento');
				$solicitud->areaTrabajo=$docSM->areaTrabajo;
				
			
				foreach($listaPendientesR as $l){
					
					$solicitud->mantenimientoRutinario=$l;
				}
				foreach($listaPendientesP as $lp){
					
					$solicitud->mantenimientoPreventivo=$lp;
				}
				
				foreach($listaPendientesC as $lc){
					
					$solicitud->mantenimientoCorrectivo=$lc;
				}
				
				$solicitud->equipoAMantener=$docSM->equipoAMantener;
				$role=NULL;
				$newEfacade =& EFacade :: initWorkflow($facade->session, $solicitud, & $role);
				$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
				$trans = $transSet->getTransByName('t1');
				$usuario=NULL;
				$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
				//echo "<br><br>la wt es: ";
				$solicitud->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
				$newEfacade->saveWorkflow();
				$solicitud->commit();//echo "<br><br> es:1 ";
				$solicitud->numero = $solicitud->getDocumentNumber();
				$solicitud->commit();
				
				
				unset($newEfacade);
		
				}
		
		$usuario=NULL;
		////////////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////////////
		$docSM ->epSetDirty(TRUE);
		$workflowsSM = & $docSM->getWorkflowRef();
		
		$workflowsSM ->epSetDirty(TRUE);

		$transSetOSL = & EFacade :: getCurrentTransSetAuto($workflowsSM , /* MTrans :: $TYPE_AUTO_AGENT */ 2);
		$listaWT= &$workflowsSM->getWorkTransList();

		$transOSL = $transSetOSL->getTransByName('t3');
		$facade->fireTrans($transOSL,$usuario,'Creacion de Ordenes', TRUE);	
			
		
	}
}
?>